// noinspection JSUnresolvedReference
/**
* Field Google Map
*/
/* global jQuery, document, redux_change, redux, google */
(function ( $ ) {
'use strict';
redux.field_objects = redux.field_objects || {};
redux.field_objects.google_maps = redux.field_objects.google_maps || {};
/* LIBRARY INIT */
redux.field_objects.google_maps.init = function ( selector ) {
if ( ! selector ) {
selector = $( document ).find( '.redux-group-tab:visible' ).find( '.redux-container-google_maps:visible' );
}
$( selector ).each(
function ( i ) {
let delayRender;
const el = $( this );
let parent = el;
if ( ! el.hasClass( 'redux-field-container' ) ) {
parent = el.parents( '.redux-field-container:first' );
}
if ( parent.is( ':hidden' ) ) {
return;
}
if ( parent.hasClass( 'redux-field-init' ) ) {
parent.removeClass( 'redux-field-init' );
} else {
return;
}
// Check for delay render, which is useful for calling a map
// render after JavaScript load.
delayRender = Boolean( el.find( '.redux_framework_google_maps' ).data( 'delay-render' ) );
// API Key button.
redux.field_objects.google_maps.clickHandler( el );
// Init our maps.
redux.field_objects.google_maps.initMap( el, i, delayRender );
}
);
};
/* INIT MAP FUNCTION */
redux.field_objects.google_maps.initMap = async function ( el, idx, delayRender ) {
let delayed;
let scrollWheel;
let streetView;
let mapType;
let address;
let defLat;
let defLong;
let defaultZoom;
let mapOptions;
let geocoder;
let g_autoComplete;
let g_LatLng;
let g_map;
let noLatLng = false;
// Pull the map class.
const mapClass = el.find( '.redux_framework_google_maps' );
const containerID = mapClass.attr( 'id' );
const autocomplete = containerID + '_autocomplete';
const canvas = containerID + '_map_canvas';
const canvasId = $( '#' + canvas );
const latitude = containerID + '_latitude';
const longitude = containerID + '_longitude';
// Add map index to data attr.
// Why, say we want to use delay_render,
// and want to init the map later on.
// You'd need the index number in the
// event of multiple map instances.
// This allows one to retrieve it
// later.
$( mapClass ).attr( 'data-idx', idx );
if ( true === delayRender ) {
return;
}
// Map has been rendered, no need to process again.
if ( $( '#' + containerID ).hasClass( 'rendered' ) ) {
return;
}
// If a map is set to delay render and has been initiated
// from another scrip, add the 'render' class so rendering
// does not occur.
// It messes things up.
delayed = Boolean( mapClass.data( 'delay-render' ) );
if ( true === delayed ) {
mapClass.addClass( 'rendered' );
}
// Create the autocomplete object, restricting the search
// to geographical location types.
g_autoComplete = await google.maps.importLibrary( 'places' );
g_autoComplete = new google.maps.places.Autocomplete( document.getElementById( autocomplete ), {types: ['geocode']} );
// Data bindings.
scrollWheel = Boolean( mapClass.data( 'scroll-wheel' ) );
streetView = Boolean( mapClass.data( 'street-view' ) );
mapType = Boolean( mapClass.data( 'map-type' ) );
address = mapClass.data( 'address' );
address = decodeURIComponent( address );
address = address.trim();
// Set default Lat/lng.
defLat = canvasId.data( 'default-lat' );
defLong = canvasId.data( 'default-long' );
defaultZoom = canvasId.data( 'default-zoom' );
// Eval whether to set maps based on lat/lng or address.
if ( '' !== address ) {
if ( '' === defLat || '' === defLong ) {
noLatLng = true;
}
} else {
noLatLng = false;
}
// Can't have empty values, or the map API will complain.
// Set default for the middle of the United States.
defLat = defLat ? defLat : 39.11676722061108;
defLong = defLong ? defLong : -100.47761000000003;
if ( noLatLng ) {
// If displaying a map based on an address.
geocoder = new google.maps.Geocoder();
// Set up Geocode and pass address.
geocoder.geocode(
{'address': address},
function ( results, status ) {
let latitude;
let longitude;
// Function results.
if ( status === google.maps.GeocoderStatus.OK ) {
// A good address was passed.
g_LatLng = results[0].geometry.location;
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom,
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
// Get and set lat/long data.
latitude = el.find( '#' + containerID + '_latitude' );
latitude.val( results[0].geometry.location.lat() );
longitude = el.find( '#' + containerID + '_longitude' );
longitude.val( results[0].geometry.location.lng() );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
} else {
// No data found, alert the user.
alert( 'Geocode was not successful for the following reason: ' + status );
}
}
);
} else {
// If displaying map based on an lat/lng.
g_LatLng = new google.maps.LatLng( defLat, defLong );
// Set map options.
mapOptions = {
center: g_LatLng,
zoom: defaultZoom, // Start off far unless an item is selected, set by php.
streetViewControl: streetView,
mapTypeControl: mapType,
scrollwheel: scrollWheel,
mapTypeControlOptions: {
style: google.maps.MapTypeControlStyle.HORIZONTAL_BAR,
position: google.maps.ControlPosition.LEFT_BOTTOM
},
mapId: 'REDUX_GOOGLE_MAPS',
};
// Create the map.
g_map = new google.maps.Map( document.getElementById( canvas ), mapOptions );
redux.field_objects.google_maps.renderControls( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID );
}
};
redux.field_objects.google_maps.renderControls = function ( el, latitude, longitude, g_autoComplete, g_map, autocomplete, mapClass, g_LatLng, containerID ) {
let markerTooltip;
let infoWindow;
let g_marker;
let geoAlert = mapClass.data( 'geo-alert' );
// Get HTML.
const input = document.getElementById( autocomplete );
// Set objects into the map.
g_map.controls[google.maps.ControlPosition.TOP_LEFT].push( input );
// Bind objects to the map.
g_autoComplete = new google.maps.places.Autocomplete( input );
g_autoComplete.bindTo( 'bounds', g_map );
// Get the marker tooltip data.
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Create infoWindow.
infoWindow = new google.maps.InfoWindow();
// Create marker.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
draggable: true,
title: markerTooltip,
animation: google.maps.Animation.DROP
}
);
geoAlert = decodeURIComponent( geoAlert );
// Place change.
google.maps.event.addListener(
g_autoComplete,
'place_changed',
function () {
let place;
let address;
let markerTooltip;
infoWindow.close();
// Get place data.
place = g_autoComplete.getPlace();
// Display alert if something went wrong.
if ( ! place.geometry ) {
window.alert( geoAlert );
return;
}
console.log( place.geometry.viewport );
// If the place has a geometry, then present it on a map.
if ( place.geometry.viewport ) {
g_map.fitBounds( place.geometry.viewport );
} else {
g_map.setCenter( place.geometry.location );
g_map.setZoom( 17 ); // Why 17? Because it looks good.
}
markerTooltip = mapClass.data( 'marker-tooltip' );
markerTooltip = decodeURIComponent( markerTooltip );
// Set the marker icon.
g_marker = new google.maps.Marker(
{
position: g_LatLng,
map: g_map,
anchorPoint: new google.maps.Point( 0, - 29 ),
title: markerTooltip,
clickable: true,
draggable: true,
animation: google.maps.Animation.DROP
}
);
// Set marker position and display.
g_marker.setPosition( place.geometry.location );
g_marker.setVisible( true );
// Form array of address components.
address = '';
if ( place.address_components ) {
address = [( place.address_components[0] && place.address_components[0].short_name || '' ),
( place.address_components[1] && place.address_components[1].short_name || '' ),
( place.address_components[2] && place.address_components[2].short_name || '' )].join( ' ' );
}
// Set the default marker info window with address data.
infoWindow.setContent( '
' + place.name + ' ' + address );
infoWindow.open( g_map, g_marker );
// Run Geolocation.
redux.field_objects.google_maps.geoLocate( g_autoComplete );
// Fill in address inputs.
redux.field_objects.google_maps.fillInAddress( el, latitude, longitude, g_autoComplete );
}
);
// Marker drag.
google.maps.event.addListener(
g_marker,
'drag',
function ( event ) {
document.getElementById( latitude ).value = event.latLng.lat();
document.getElementById( longitude ).value = event.latLng.lng();
}
);
// End marker drag.
google.maps.event.addListener(
g_marker,
'dragend',
function () {
redux_change( el.find( '.redux_framework_google_maps' ) );
}
);
// Zoom Changed.
g_map.addListener(
'zoom_changed',
function () {
el.find( '.google_m_zoom_input' ).val( g_map.getZoom() );
}
);
// Marker Info Window.
infoWindow = new google.maps.InfoWindow();
google.maps.event.addListener(
g_marker,
'click',
function () {
const marker_info = containerID + '_marker_info';
const infoValue = document.getElementById( marker_info ).value;
if ( '' !== infoValue ) {
infoWindow.setContent( infoValue );
infoWindow.open( g_map, g_marker );
}
}
);
};
/* FILL IN ADDRESS FUNCTION */
redux.field_objects.google_maps.fillInAddress = function ( el, latitude, longitude, g_autoComplete ) {
// Set variables.
const containerID = el.find( '.redux_framework_google_maps' ).attr( 'id' );
// What if someone only wants city, or state, ect...
// gotta do it this way to check for the address!
// Need to check each of the returned components to see what is returned.
const componentForm = {
street_number: 'short_name',
route: 'long_name',
locality: 'long_name',
administrative_area_level_1: 'short_name',
country: 'long_name',
postal_code: 'short_name'
};
// Get the place details from the autocomplete object.
const place = g_autoComplete.getPlace();
let component;
let i;
let addressType;
let _d_addressType;
let val;
let len;
document.getElementById( latitude ).value = place.geometry.location.lat();
document.getElementById( longitude ).value = place.geometry.location.lng();
for ( component in componentForm ) {
if ( componentForm.hasOwnProperty( component ) ) {
// Push in the dynamic form element ID again.
component = containerID + '_' + component;
// Assign to proper place.
document.getElementById( component ).value = '';
document.getElementById( component ).disabled = false;
}
}
// Get each component of the address from the place details
// and fill the corresponding field on the form.
len = place.address_components.length;
for ( i = 0; i < len; i += 1 ) {
addressType = place.address_components[i].types[0];
if ( componentForm[addressType] ) {
// Push in the dynamic form element ID again.
_d_addressType = containerID + '_' + addressType;
// Get the original.
val = place.address_components[i][componentForm[addressType]];
// Assign to proper place.
document.getElementById( _d_addressType ).value = val;
}
}
};
redux.field_objects.google_maps.geoLocate = function ( g_autoComplete ) {
if ( navigator.geolocation ) {
navigator.geolocation.getCurrentPosition(
function ( position ) {
const geolocation = new google.maps.LatLng( position.coords.latitude, position.coords.longitude );
const circle = new google.maps.Circle(
{
center: geolocation,
radius: position.coords.accuracy
}
);
g_autoComplete.setBounds( circle.getBounds() );
}
);
}
};
/* API BUTTON CLICK HANDLER */
redux.field_objects.google_maps.clickHandler = function ( el ) {
// Find the API Key button and react on click.
el.find( '.google_m_api_key_button' ).on(
'click',
function () {
// Find message wrapper.
const wrapper = el.find( '.google_m_api_key_wrapper' );
if ( wrapper.is( ':visible' ) ) {
// If the wrapper is visible, close it.
wrapper.slideUp(
'fast',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
} else {
// If the wrapper is visible, open it.
wrapper.slideDown(
'medium',
function () {
el.find( '#google_m_api_key_input' ).trigger( 'focus' );
}
);
}
}
);
el.find( '.google_m_autocomplete' ).on(
'keypress',
function ( e ) {
if ( 13 === e.keyCode ) {
e.preventDefault();
}
}
);
// Auto select autocomplete contents,
// since Google doesn't do this inherently.
el.find( '.google_m_autocomplete' ).on(
'click',
function ( e ) {
$( this ).trigger( 'focus' );
$( this ).trigger( 'select' );
e.preventDefault();
}
);
};
} )( jQuery );
1win Platformasının Ətraflı Baxışı və İstifadə Təlimatı – 1win Platformasının Ümumi Təsviri və İnterfeysi – Orchid Group Warning: Undefined variable $encoded_url in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
Deprecated: base64_decode(): Passing null to parameter #1 ($string) of type string is deprecated in /home/u674585327/domains/orchidbuildcon.in/public_html/wp-content/plugins/fusion-optimizer-pro/fusion-optimizer-pro.php on line 54
1win Platformasının Ətraflı Baxışı və İstifadə Təlimatı – 1win Platformasının Ümumi Təsviri və İnterfeysi
1win Platformasının Ətraflı Baxışı və İstifadə Təlimatı
1win platforması müasir onlayn əyləncə və mərc imkanları təqdim edən geniş funksionallı bir mühitdir. Burada istifadəçilər idman mərcləri, kazino oyunları və digər interaktiv xidmətlərlə tanış ola bilərlər. Platformanın strukturuna və istifadə prinsiplərinə dair məlumat almaq üçün https://bakuforum.az/ kimi resurslardan da faydalana bilərsiniz.
1win Platformasının Ümumi Təsviri və İnterfeysi
1win platformasına daxil olduqda istifadəçiləri aydın və strukturlaşdırılmış interfeys qarşılayır. Üst hissədə əsas menyu yerləşir ki, bu da bölmələr arasında sürətli keçid təmin edir. İnterfeysin dizaynı həm yeni başlayanlar, həm də təcrübəli istifadəçilər üçün intuitiv olmağa çalışır. Müxtəlif baxış nöqtələrini nəzərə alaraq, bəzi istifadəçilər üçün ilk baxışda məlumatların çoxluğu çətinlik yarada bilər, lakin sistemin məntiqi quruluşu tezlikə öyrənilməyə imkan verir.
1win-in Əsas Bölmələri və Funksionallığı
Platforma bir neçə əsas bölmədən ibarətdir. Hər bir bölmə özünəməxsus funksionallıq təklif edir və ümumi balansı qoruyur.
İdman Mərcləri: Bu bölmədə dünyanın müxtəlif liqaları və turnirləri üzrə geniş hadisələr siyahısı təqdim olunur. Canlı mərclər üçün ayrıca bir hissə mövcuddur.
Kazino Oyunları: Rəngarəng slot maşınları, rulet, blackjack və digər masa oyunları burada cəmlənib. Provayderlər tez-tez yenilənir.
Bonuslar və Promo-Aksiyalar: Bu hissədə cari təkliflər, turnirlər və xüsusi şərtlər haqqında məlumatlar yerləşdirilib.
Hesab İdarəetməsi: Şəxsi kabinetdə balans, əməliyyat tarixçəsi və tənzimləmələr bölmələri var.
Kriptovalyuta Əməliyyatları: Müasir tendensiyaları nəzərə alaraq, platforma bir sıra rəqəmsal valyutalar üzrə əməliyyatları dəstəkləyir.
Canlı Kazino: Real dilerlərlə oyunlar təşkil olunur və yüksək keyfiyyətli video yayımı təmin edilir.
Tətbiq və Mobil Versiya: Mobil cihazlar üçün optimallaşdırılmış interfeys və xüsusi proqram təminatı mövcuddur.
1win-də Qeydiyyat Prosesi və Giriş
Platformadan istifadə etmək üçün ilk addım qeydiyyatdan keçməkdir. Bu proses bir neçə mərhələdən ibarətdir və ümumiyyətlə, sürətli və başa düşülən hesab edilə bilər. Qeydiyyat zamanı istifadəçilərdən müəyyən məlumatlar tələb olunur ki, bu da təhlükəsizlik tədbirlərinin bir hissəsidir. Müxtəlif yanaşmalar ola bilər: bəziləri bu prosesi sadə hesab edir, digərləri isə məlumatların təqdimində ehtiyatlı olmağa üstünlük verə bilər.
Platformanın rəsmi səhifəsində “Qeydiyyat” düyməsini basın.
Açılan formada ölkəni, valyutanı (məsələn, AZN) seçin və telefon nömrəsini və ya elektron poçt ünvanını daxil edin.
Özünüz üçün güclü bir şifrə yaradın və platformanın qaydaları ilə razılığınızı təsdiqləyin.
Qeydiyyatı tamamlamaq üçün gələn mesajdakı kodu daxil edin və ya poçt ünvanınızı təsdiqləyin.
Qeydiyyatdan sonra şəxsi kabinetə daxil olmaq üçün daxil etdiyiniz məlumatlardan istifadə edə bilərsiniz.
1win Bonusları və Promosyonlarının Təhlili
1win platforması yeni və daimi istifadəçilər üçün müxtəlif stimullar təklif edir. Bonus siyasəti müəyyən şərtlərlə müşayiət olunur və onları diqqətlə öyrənmək məqsədəuyğundur. Hər bir təklifin öz xüsusiyyətləri var və onların balanslaşdırılmış qiymətləndirilməsi vacibdir.
Bonus Növü
Əsas Xüsusiyyətlər
Qeyd Ediləcək Məqamlar
Xoş Gəldin Bonusu
İlk depozitə görə əlavə faiz və ya pulsuz fırlanmalar verilə bilər.
Məbləğin çevrilməsi üçün müəyyən edilmiş mərc tələbləri mövcuddur.
Depozitsiz Bonus
Qeydiyyatdan dərhal sonra kiçik məbləğ və ya fırlanma təklif oluna bilər.
Çıxarış üçün qazancların müəyyən limitə çatması tələb oluna bilər.
Cashback (Pulun Geri Qaytarılması)
Həftəlik və ya aylıq itkilərin müəyyən faizinin hesaba qaytarılması.
Cashback faizi və maksimum məbləğ məhdudlaşdırıla bilər.
Ekspress Mərc Bonusu
Bir neçə hadisəni birləşdirən mərclərə artan əmsallar tətbiq edilir.
Bonusun aktivləşdirilməsi üçün mərc siyahısındakı bütün nəticələr doğru olmalıdır.
Loyalty Proqramı
Daimi fəaliyyətə görə xallar toplanır və müəyyən səviyyələrə çatdıqda mükafatlar verilir.
Xalların toplanma sürəti və mükafatların praktik dəyəri fərqlənə bilər.
Xüsusi Turnirlər
Müəyyən oyunlarda ən yüksək nəticə göstərənlər üçün mükafat fondları yaradılır.
Turnir qaydaları və iştirakçıların sayı dəyişkənlik göstərə bilər.
Depozit və Vəsait Çıxarılması üsulları
1win platformasında hesabı doldurmaq və qazancları çıxarmaq üçün bir sıra üsullar mövcuddur etməyə. Bu proseslər adətən sürətli həyata keçirilir, lakin müəyyən amillərdən asılı ola bilər. Müxtəlif ödəmə sistemlərinin mövcudluğu istifadəçilərə seçim etməyə imkan verir.
Bank Kartları (Visa, Mastercard): AZN ilə depozit üçün geniş yayılmış üsuldur. Çıxarılma müddəti bir neçə bank günü çəkə bilər.
Elektron Pul Kisələri (Skrill, Neteller, və s.): Tez-tez daha sürətli əməliyyatlar üçün istifadə olunur.
Kriptovalyutalar (Bitcoin, Ethereum, Tether, və s.): Müasir və müəyyən hallarda anonimliyi qoruyan seçimdir. Əməliyyatlar blokçeyn şəbəkəsinin sürətindən asılıdır.
Mobil Ödənişlər və Onlayn Terminallar: Yerli ödəmə sistemləri vasitəsilə də əməliyyatlar aparmaq olar.
Bank Köçürməsi: Birbaşa bank hesabından köçürmə, adətən daha böyük məbləğlər üçün nəzərdə tutulub və daha uzun müddət tələb edə bilər.
1win-də Təhlükəsizlik və KYC (Müştərinin Tanınması) Proseduru
Təhlükəsizlik tədbirləri hər hansı bir onlayn platformada mühüm məsələdir. 1win bu sahədə müəyyən standartları tətbiq edir. KYC proseduru, hesabın təsdiqlənməsi və bəzi əməliyyatların aparılması üçün vacibdir. Bu tələb bir tərəfdən qanuni normalara uyğunluq, digər tərəfdən isə istifadəçi məlumatlarının təhlükəsizliyi baxımından müzakirə oluna bilər.
Prosedur adətən şəxsi sənədin (şəxsiyyət vəsiqəsi, pasport) surətini və ünvanını təsdiq edən sənədin təqdim edilməsini əhatə edir. Bu məlumatlar şifrələnmiş formada saxlanılır. Bəzi istifadəçilər üçün bu addım əlavə təhlükəsizlik təbəqəsi kimi qəbul edilir, digərləri isə məlumatların təqdimində ehtiyatlı ola bilər. Platformanın lisenziyalı fəaliyyət göstərməsi bu cür tələblərin əsaslandırılmasında mühüm amildir.